﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Messaging;
namespace WinfDelivery
{
    public partial class mailControl : Form
    {
        public mailControl()
        {
            InitializeComponent();
        }

        private void mailControl_Load(object sender, EventArgs e)
        {
            MessageQueue msgQ = new MessageQueue(".\\private$\\msgIN");
            ReadQueueMessagesByLabel(msgQ);
            btnDETENER.Enabled = false;
        }


        public static List<entidades.citaBE> listaPublica = new List<entidades.citaBE>();
        private void ReadQueueMessagesByLabel(MessageQueue msgQ) { 
            List<entidades.citaBE> lista = new List<entidades.citaBE>();
            entidades.citaBE cita = new entidades.citaBE();
            Object o = new Object(); 
            System.Type[] arrTypes = new System.Type[2];
            arrTypes[0] = cita.GetType(); 
            arrTypes[1] = o.GetType(); 
            msgQ.Formatter = new XmlMessageFormatter(arrTypes); 
            System.Messaging.Message[] messages = msgQ.GetAllMessages();

            listaMensajes = msgQ.GetAllMessages();
            foreach (System.Messaging.Message msg in messages)
            {
                cita = (entidades.citaBE)msg.Body;
                cita.TITLE = msg.Label.ToString();
                cita.ID = msg.Id.ToString();
                lista.Add(cita);
            }
            listaPublica = lista;
            gvMensajes.DataSource = lista;
        }

        public static System.Messaging.Message[] listaMensajes= null;
        private void btnRecepcionar_Click(object sender, EventArgs e)
        {
            entidades.citaBE cita;
            string mensaje = string.Empty;
            string dni = gvMensajes["TITLE", gvMensajes.CurrentRow.Index].Value.ToString();
            string id = gvMensajes["ID", gvMensajes.CurrentRow.Index].Value.ToString();
            var dato = (from c in listaPublica where c.TITLE == dni select c).First();
            var accesoDatos = new datos.mensajesDAO();
            accesoDatos.grabarMensaje(dato, ref mensaje);

            MessageQueue msgQ = new MessageQueue();
            foreach (System.Messaging.Message msg in listaMensajes)
            {
                if (msg.Label == dni) {
                    cita = (entidades.citaBE)msgQ.ReceiveById(msg.Id).Body;
                }
            }
            
            MessageBox.Show(mensaje);
        }

        

        private void timer1_Tick(object sender, EventArgs e)
        {
            MessageQueue msgQ = new MessageQueue(".\\private$\\msgIN");
            ReadQueueMessagesByLabel(msgQ);
            string actualizacion = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            listHistorial.Items.Add(string.Format("{0} {1}", "Ultima actualizacion: ", actualizacion));
        }

        private void btnDETENER_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            btnDETENER.Enabled = false;
            btnINICIAR.Enabled = true;
        }

        private void btnINICIAR_Click(object sender, EventArgs e)
        {
            timer1.Interval = 5000;
             timer1.Start();
            btnINICIAR.Enabled = false;
            btnDETENER.Enabled = true;
        }
    }
}
